LibreOffice Calc nie ma wbudowanej funkcji umożliwiającej wyświetlanie liczb w arkuszu jako angielskie słowa, ale można dodać tę możliwość, wstawiając następujące makro funkcji SpellNum_YouLibreCalc do modułu Basic.
Ta funkcja umożliwia konwersję liczb na słowa w dowolnej walucie za pomocą formuły, takiej jak liczba 22.50 będzie czytane jako
Może to być bardzo przydatne, jeśli używasz LO Calc jako szablonu do wypełniania czeków lub innych dokumentów księgowych.
Aby dodać własną funkcję dla sumy napisanej w języku angielskim, otwórz menu Tools - Macros - Edit Macros..., wybierz Module1 i skopiuj poniższy tekst kodu do wybranego modułu:
Function SpellNum_YouLibreCalc(ByVal MyNumber, Optional CurrNameS, Optional CurrNamePl, Optional CentNameS, Optional CentNamePl, Optional Modifier, Optional CurrPlace, Optional AddZero) 'moonexcel.com.ua Dim Place(9) As String Dim FCalc As Object Dim Dollars, Cents, Temp, DecimalPlace, Count, CalcResult If Len(MyNumber) = 0 Then Exit Function FCalc = CreateUnoService("com.sun.star.sheet.FunctionAccess") If IsMissing(CurrNameS) Then CurrNameS = 0 If IsMissing(CurrNamePl) Then CurrNamePl = 0 If IsMissing(CentNameS) Then CentNameS = 0 If IsMissing(CentNamePl) Then CentNamePl = 0 If IsMissing(Modifier) Then Modifier = 0 If IsMissing(CurrPlace) Then CurrPlace = 0 If IsMissing(AddZero) Then AddZero = 0 If CurrNameS = 0 Then CurrNameS = "" If CurrNamePl = 0 Then CurrNamePl = "" If CentNameS = 0 Then CentNameS = "" If CentNamePl = 0 Then CentNamePl = "" Place(2) = " Thousand " Place(3) = " Million " Place(4) = " Billion " Place(5) = " Trillion " MyNumber = Trim(Str(MyNumber)) ValMyNumber = Val(MyNumber) DecimalPlace = InStr(MyNumber, ".") If DecimalPlace > 0 Then If Modifier = 5 Then Cents = GetHundreds(Left(Mid(MyNumber, DecimalPlace + 1) & "000", 3)) Else Cents = GetTens(Left(Mid(MyNumber, DecimalPlace + 1) & "00", 2)) End If MyNumber = Trim(Left(MyNumber, DecimalPlace - 1)) End If Count = 1 Do While MyNumber <> "" Temp = GetHundreds(Right(MyNumber, 3)) If Temp <> "" Then Dollars = Temp & Place(Count) & Dollars If Len(MyNumber) > 3 Then MyNumber = Left(MyNumber, Len(MyNumber) - 3) Else MyNumber = "" End If Count = Count + 1 Loop If Modifier = 3 Then CalcResult = FCalc.callFunction("MOD", Array(ValMyNumber, 1)) CalcResult = FCalc.callFunction("ROUND", Array(CalcResult, 2)) Cents = Str(CalcResult * 100) & "/100" End If If Modifier = 4 Then CalcResult = FCalc.callFunction("MOD", Array(ValMyNumber, 1)) CalcResult = FCalc.callFunction("ROUND", Array(CalcResult, 3)) Cents = Str(CalcResult * 1000) & "/1000" End If If CurrPlace = 1 Then If Len(Dollars) = 0 Then Dollars = CurrNamePl & " Zero" ElseIf Dollars = "One" Then Dollars = CurrNameS & " One" Else Dollars = CurrNamePl & " " & Dollars End If Else If Len(Dollars) = 0 Then Dollars = "Zero " & CurrNamePl ElseIf Dollars = "One" Then Dollars = "One " & CurrNameS Else Dollars = Dollars & " " & CurrNamePl End If End If LenCents = Len(Cents) If CurrPlace = 1 Then If LenCents = 0 Then Cents = CentNamePl & " Zero" ElseIf Cents = "One" Then Cents = CentNamePl & " One" Else Cents = CentNamePl & " " & Cents End If Else If LenCents = 0 Then Cents = "Zero " & CentNamePl ElseIf Cents = "One" Then Cents = "One " & CentNameS Else Cents = Cents & " " & CentNamePl End If End If If Modifier <> 2 Then Cents = " and " & Cents If LenCents = 0 And AddZero <> 1 Then Cents = "" Select Case Modifier Case 1: SpellNumber = Dollars Case 2: SpellNumber = Cents Case Else: SpellNumber = Dollars & Cents End Select SpellNum_YouLibreCalc = FCalc.callFunction("TRIM", Array(SpellNumber)) End Function Function GetHundreds(ByVal MyNumber) Dim Result As String If Val(MyNumber) = 0 Then Exit Function MyNumber = Right("000" & MyNumber, 3) 'Перетворити розряд сотень If Mid(MyNumber, 1, 1) <> "0" Then Result = GetDigit(Mid(MyNumber, 1, 1)) & " Hundred " End If 'Перетворити розряди десятків і одиниць If Mid(MyNumber, 2, 1) <> "0" Then Result = Result & GetTens(Mid(MyNumber, 2)) Else Result = Result & GetDigit(Mid(MyNumber, 3)) End If GetHundreds = Result End Function Function GetTens(TensText) Dim Result As String 'Обнулити значення тимчасової функції Result = "" 'Якщо значення між 10-19... If Val(Left(TensText, 1)) = 1 Then Select Case Val(TensText) Case 10: Result = "Ten" Case 11: Result = "Eleven" Case 12: Result = "Twelve" Case 13: Result = "Thirteen" Case 14: Result = "Fourteen" Case 15: Result = "Fifteen" Case 16: Result = "Sixteen" Case 17: Result = "Seventeen" Case 18: Result = "Eighteen" Case 19: Result = "Nineteen" Case Else End Select Else 'Якщо значення між 20-99... Select Case Val(Left(TensText, 1)) Case 2: Result = "Twenty " Case 3: Result = "Thirty " Case 4: Result = "Forty " Case 5: Result = "Fifty " Case 6: Result = "Sixty " Case 7: Result = "Seventy " Case 8: Result = "Eighty " Case 9: Result = "Ninety " Case Else End Select 'Отримати своє місце Result = Result & GetDigit(Right(TensText, 1)) End If GetTens = Result End Function Function GetDigit(Digit) Select Case Val(Digit) Case 1: GetDigit = "One" Case 2: GetDigit = "Two" Case 3: GetDigit = "Three" Case 4: GetDigit = "Four" Case 5: GetDigit = "Five" Case 6: GetDigit = "Six" Case 7: GetDigit = "Seven" Case 8: GetDigit = "Eight" Case 9: GetDigit = "Nine" Case Else: GetDigit = "" End Select End Function
Następnie zamknij Macro Editor, wróć do LibreOffice Calc, wybierz dowolną komórkę i skorzystaj z naszej nowej funkcji.
Możesz także użyć funkcji SPELLNUMBER(), instalując bezpłatne rozszerzenie YouLibreCalc.oxt lub jego w pełni funkcjonalna wersja YLC_Utilities.oxt .
Od tego momentu ta funkcja będzie dostępna we wszystkich plikach, które zostaną otwarte w LibreOffice Calc.